a11y: Allow updating role on unrealized contexts
authorEmmanuele Bassi <ebassi@gnome.org>
Wed, 4 Nov 2020 14:35:16 +0000 (14:35 +0000)
committerEmmanuele Bassi <ebassi@gnome.org>
Wed, 4 Nov 2020 15:22:31 +0000 (15:22 +0000)
We can still change the accessible role if an ATContext instance is
unrealized.

gtk/gtkatcontext.c
gtk/gtkwidget.c

index 078dc2872d6e8d6d882b89fc71df23808be3b671..0305ac156ece3428ddb91341566386df648ac800 100644 (file)
@@ -90,7 +90,10 @@ gtk_at_context_set_property (GObject      *gobject,
   switch (prop_id)
     {
     case PROP_ACCESSIBLE_ROLE:
-      self->accessible_role = g_value_get_enum (value);
+      if (!self->realized)
+        self->accessible_role = g_value_get_enum (value);
+      else
+        g_critical ("The accessible role cannot be set on a realized AT context");
       break;
 
     case PROP_ACCESSIBLE:
@@ -203,7 +206,7 @@ gtk_at_context_class_init (GtkATContextClass *klass)
                        GTK_TYPE_ACCESSIBLE_ROLE,
                        GTK_ACCESSIBLE_ROLE_NONE,
                        G_PARAM_READWRITE |
-                       G_PARAM_CONSTRUCT_ONLY |
+                       G_PARAM_CONSTRUCT |
                        G_PARAM_STATIC_STRINGS);
 
   /**
index 36c8f95ade91e3e9353fcc659d8cddbde3daf6e3..9c4f78ad57dff36dfeba89e1d3788b5339b72615 100644 (file)
@@ -1731,7 +1731,7 @@ gtk_widget_set_property (GObject         *object,
       gtk_widget_set_layout_manager (widget, g_value_dup_object (value));
       break;
     case PROP_ACCESSIBLE_ROLE:
-      if (priv->at_context == NULL)
+      if (priv->at_context == NULL || !gtk_at_context_is_realized (priv->at_context))
         {
           priv->accessible_role = g_value_get_enum (value);
           g_object_notify_by_pspec (object, pspec);